Computer operating systems are monolithic and include many complex dependencies between components and modules. Operating system components depend on each other based on a hierarchical relationship. Components at upper layers in the hierarchy are dependent on a larger number of components than components at lower layers. Components belonging to lower layers in the hierarchy are not dependent on components in the higher layers. As a result, components at lower layers in the operating system have access to a lower number of available operating system services.
As the size of an operating system increases, testing becomes more costly. The effect of removing or modifying a component is difficult to understand when an operating system includes a large number of complex dependent components. The effectiveness of testing improves when the number of dependencies among components is decreased.
The large number of complex dependencies is the result of a lack of dependency management during operating system development cycles. What is needed is a way to establish a common operating system with a limited number of dependent components.